/**
 * 
 */
package com.xpec.c4.game.datamanager.agent.money;

import java.util.HashMap;

import com.xpec.c4.game.datamanager.agent.PlayerDataAgent;

/**
 * 角色金錢變更行為列舉
 * 
 * @author TW15010
 */
public enum MoneyChangeWay {
	// 增加金錢的行為, id 必須大於 0 =============================================
	ADD_TEST(1, "增加測試", false),

	/** debug command 加錢 */
	ADD_TEST_COMMAND(2, "加錢測試命令", false),

	/** 輸入邀請碼獲得金幣 */
	ADD_INVITE_CODE(3, "輸入邀請碼獲得金幣", true), //yes

	/** 收到禮物加錢 */
	ADD_SEND_GIFT(10, "收到禮物", true), //yes

	/** 禮物退回 */
	ADD_GIFT_RETURN(11, "禮物退回", true), //yes
	
	/** 過時禮物退回 */
	ADD_GIFT_TIME_OUT_RETURN(12, "過時禮物退回", true), //yes
	
	/** 從銀行裡提錢出來 */
	ADD_BANK_GET_CASH(20, "提款", true), //yes
	
	/** 包月每日配發 */
	ADD_MONTHLY_FEE_DAILY_PAY(21, "包月每日配發", false),
	
	/** 包月當下配發 */
	ADD_MONTHLY_FEE_FIRST_PAY(22, "包月當下配發", false),
	
	/** 點數轉遊戲幣 */
	ADD_BANK_CHANGE_POINT_TO_GOLD(23, "點數轉遊戲幣", true), //yes

	/** 領取自動回復幸運金 */
	ADD_GET_AUTO_RECOVER_LUCKY_COIN(24, "領取自動回復幸運金", false),

	/** 使用禮包獲得錢 */
	ADD_USE_BONUS_PACK(25, "使用禮包獲得錢", false),
	
	/** 連續登陸獎勵 */
	ADD_CONTINUE_REWARD(26, "連續登陸獎勵", true), //yes

	/** 回饋金 */
	ADD_REBATE_COIN(28,"回饋金", false),
	
	/** 小樂要求增加體驗幣 */
	ADD_ROBOT_ADD_TRIAL(29,"小樂要求增加體驗幣", false),
	
	/** 使用C幣卡獲得*/
	ADD_USE_GOLDCOIN_CARD(30,"使用C幣卡獲得", true), //yes
	
	/**領取紅包-官方**/
	ADD_SCORE_HONBO(101,"領取官方紅包", false),
	
	/**領取紅包-玩家**/
	ADD_SCORE_CUSTOMHONBO(102,"領取玩家紅包", false),
	
	/**紅包沒發完回收**/
	ADD_SCORE_LASTHONBOMONEY(103,"紅包沒發完回收", false),
	
	/**************↓排行榜資料↓1000以上**************/
	/** 押注後得分加錢 */
	ADD_SCORE(1000, "得分", false),
	
	/**JP彩金得分加錢
	 * @WARN 中JP又用 updatePlayerMoneyToDC 記得加上 jpMoney
	 * @see PlayerDataAgent.updatePlayerMoneyToDC
	 **/
	ADD_JPSCORE(1001 , "JP彩金得分", false),
	/**************↑排行榜資料↑2000以下(不包括2000)**************/
	
	/** 模擬得分命令 */
	ADD_SCORE_COMMAND(2002, "模擬得分命令", false),
	
	/****************** 捷豹 3000 ************************/
	
	/** 從暫存錢包轉錢到身上 */
	ADD_H5_FROM_TMP_CASH_ON_RETUNE_SCORE(3000, "從暫存錢包轉錢到身上", true),

	/** 從暫存錢包轉錢到身上 */
	ADD_H5_FROM_TMP_CASH_ON_AUTO_REFRESH(3001, "從暫存錢包轉錢到身上", true),

	/** 從暫存錢包轉錢到身上 */
	ADD_H5_FROM_TMP_CASH_ON_MANUAL_REFRESH(3002, "從暫存錢包轉錢到身上", true),

	// 減少金錢的行為, id 必須小於 0 =============================================
	SUB_TEST(-1, "減少測試", false),

	/** debug command 扣錢 */
	SUB_TEST_COMMAND(-2, "扣錢測試命令", false),

	/** 送禮物扣錢 */
	SUB_SEND_GIFT(-10, "寄送禮物", true), //yes
	
	/** 存錢到銀行裡 */
	SUB_BANK_DEPOSIT(-20, "存款", true), //yes
	
	/**重置任務扣錢*/
	SUB_RESET_MISSION(-31, "重置任務扣錢", true), //yes
	
	/**發送紅包**/
	SUB_SCORE_MAKEHONBO(-100,"發送紅包", true), //yes

	/** 買翻寶券*/
	SUB_BUY_FNBO_VOUCHER(-32,"購買翻寶券扣除", true),
	
	/** 被GMTOOL扣除*/
	SUB_BY_GMTOOL(-33, "被GMTOOL扣除", true),
	
	/** 押注扣錢 */
	SUB_BET(-1000, "押注", false),
	
	/****************** 捷豹 -3000 ************************/
	
	/** 開分 */
	SUB_H5_RETURN_SCORE(-3000, "現金網回分", true);


	/**
	 * 代表數值
	 */
	private int id;

	/**
	 * 說明
	 */
	private String desc;
	
	/**
	 * 是否為日常收支
	 */
	private boolean dailyExchange;

	/**
	 * id to enum item map
	 */
	private static final HashMap<Integer, MoneyChangeWay> idToEnumMap = new HashMap<Integer, MoneyChangeWay>();

	static {
		MoneyChangeWay[] list = values();
		for (MoneyChangeWay way : list) {
			idToEnumMap.put(way.getId(), way);
		}
	}

	/**
	 * @param id
	 *            代表數值
	 * @param desc
	 *            說明
	 */
	private MoneyChangeWay(int id, String desc, boolean dailyExchange) {
		this.id = id;
		this.desc = desc;
		this.dailyExchange = dailyExchange;
	}

	public boolean isDailyExchange() {
		return dailyExchange;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDesc() {
//		return desc;
		return this.name();//20160518 改成回傳enum.name()
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	/**
	 * 是否為增加值
	 * 
	 * @return true 是<br>
	 *         false 否
	 */
	public boolean isAdd() {
		return (id > 0);
	}

	/**
	 * 是否為減少值
	 * 
	 * @return true 是<br>
	 *         false 否
	 */
	public boolean isSubtract() {
		return (id < 0);
	}

	/**
	 * 是否統計道今日得分
	 * 
	 * @return true 是<br>
	 *         false 否
	 */
	public boolean isDailyScore() {
		return (id >= 1000 && id<2000);
	}

	/**
	 * 是否為押注
	 * 
	 * @return true 是<br>
	 *         false 否
	 */
	public boolean isDailyBet() {
		return (id <= -1000);
	}
	
	/**
	 * 是否為JP彩
	 * 
	 * @return true 是<br>
	 *         false 否
	 */
	public boolean isJackpot() {
		//JP彩編號
		return (id == 1001);
	}
	
	/**
	 * 是否為銀行功能
	 * 
	 * @return
	 */
	public boolean isBank(){
		return(id == 20 || id == -20);
	}
	
	/**
	 * 是否為點數轉換
	 * 
	 * @return
	 */
	public boolean isChangeCash(){
		return(id >= 22);
	}
	
	/**
	 * 是否為包月
	 * 
	 * @return
	 */
	public boolean isMonthlyFee(){
		return(id == 22);
	}
	
	/**
	 * 紅包新增金額至保險箱
	 * @return
	 */
	public boolean isAddHonboToBank()
	{
		return (id==ADD_SCORE_HONBO.getId() 
							|| 
					id==ADD_SCORE_CUSTOMHONBO.getId() 
							|| 
					id==ADD_SCORE_LASTHONBOMONEY.getId()
				);
	}
	
	/**
	 * 玩家發送紅包
	 * @return
	 */
	public boolean isSubHonbo()
	{
		return (id==-100);
	}
	/**
	 * 是否為回饋金
	 * 
	 * @return
	 */
	public boolean isRebateCoin(){
		return (id == 28);
	}
	
	public static MoneyChangeWay getChangeWay(int id) {
		if(idToEnumMap.containsKey(id)){
			return idToEnumMap.get(id);
		}
		return null;
	}
}
